import matplotlib.pyplot as plt
import numpy as np
import os
from matplotlib import font_manager
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置中文字体
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题
# 文件路径
result_dir = "/home/lty1207/桌面/ddr/ns-3.38/contrib/ddr/infocomm2024/EXP1/EPOCH1/result2"
files = ["ddr.txt", "dyanmic.txt", "ospf.txt","dgr.txt"]
labels = ["DDR", "Dynamic-DDR", "OSPF"  , "DGR"]
colors = ["blue", "green", "red", "orange"]

# 创建图表
plt.figure(figsize=(10, 6))

# 遍历每个文件并绘制数据
for i, (file_name, label, color) in enumerate(zip(files, labels, colors)):
    file_path = os.path.join(result_dir, file_name)
    try:
        # 读取文件数据
        with open(file_path, 'r') as f:
            lines = f.readlines()
        
        # 处理数据 - 奇数行是延迟值，偶数行是到达率
        delays = []
        arrival_rates = []
        
        # 确保数据格式正确
        if len(lines) > 0:
            # 有些文件第一行可能是19500（如之前的ddr.txt），有些可能从第二行开始
            if i == 0 and lines[0].strip() == "19500":
                # 特殊处理ddr.txt的第一行
                delays.append(float(lines[0].strip()))
                arrival_rates.append(float(lines[1].strip()))
                start_idx = 2
            else:
                # 其他文件从第一行开始处理
                start_idx = 0
            
            # 处理剩余数据
            for j in range(start_idx, len(lines), 2):
                if j+1 < len(lines):
                    delays.append(float(lines[j].strip()))
                    arrival_rates.append(float(lines[j+1].strip()))
        
        # 绘制曲线
        plt.plot(delays, arrival_rates, marker='o', linestyle='-', color=color, label=label, markersize=4)
        
    except Exception as e:
        print(f"处理文件 {file_name} 时出错: {e}")

# 添加图表标题和标签
plt.title("不同路由协议/算法的延迟-到达率性能对比")
plt.xlabel("延迟值 (微秒)")
plt.ylabel("数据包到达率")
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(loc='best')

# 设置坐标轴范围
plt.xlim(19000, 45000)
plt.ylim(-0.05, 1.05)

# 保存图表
output_file = os.path.join(result_dir, "performance_comparison.png")
plt.tight_layout()
plt.savefig(output_file, dpi=300)
print(f"图表已保存至: {output_file}")

# 显示图表
plt.show()